#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>  
#include <stdlib.h>  

void decimalToBinary(int n) {
    if (n > 1)
        decimalToBinary(n / 2);
    printf("%d", n % 2);
}

void decimalToOctal(int n) {
    if (n >= 8)
        decimalToOctal(n / 8);
    printf("%d", n % 8);
}

void decimalToHexadecimal(int n) {
    if (n >= 16)
        decimalToHexadecimal(n / 16);
    if (n % 16 < 10)
        printf("%d", n % 16);
    else
        printf("%c", (n % 16) - 10 + 'A');
}

void menu()
{
    printf("******请选择你想要的进制转换******\n");
    printf("********0.退出转换********\n");
    printf("********1.转二进制********\n");
    printf("********2.转八进制********\n");
    printf("*******3.转十六进制*******\n");

}

int main() {
    int choice = 0, num;
    void(*pfArr[])(int) = {NULL, decimalToBinary, decimalToOctal, decimalToHexadecimal};

    do 
    {
        menu();
        printf("请选择:>");
        scanf("%d", &choice);

        if (choice == 0) printf("游戏退出\n");
        else if (choice >= 1 && choice <= 3) {
            printf("请输入你要转换的十进制数：");
            scanf("%d", &num);
            printf("转换后为:");
            pfArr[choice](num);
            printf("\n");
        }
        else printf("错误，请再次输入！");

    } while (choice);
    
    return 0;
}